package com.lanyou.esb.cook.proxy.dao;

import java.util.List;
import java.util.Map;

import com.lanyou.esb.cook.proxy.exception.PersistentDataException;

public interface Dao<T> {
	/**
	 * 保存单个实体
	 * 
	 * @param target
	 * @return
	 */
	int save(T target);

	/**
	 * 保存多个实体
	 * 
	 * @param list
	 * @return
	 * @throws PersistentDataException 
	 */
	int saveAll(List<T> list) throws PersistentDataException;

	/**
	 * 更新实体
	 * 
	 * @param target
	 * @return
	 */
	int update(T target);

	/**
	 * 批量更新实体
	 * 
	 * @param list
	 */
	int update(List<T> list);

	/**
	 * 根据ID获取实体
	 * 
	 * @param id
	 * @return
	 */
	T findById(String id);

	/**
	 * 根据ID获取实体
	 * 
	 * @param ids
	 * @return
	 */
	List<T> findById(List<String> ids);

	/**
	 * 根据编码获取实体
	 * 
	 * @param code
	 * @return
	 */
	T findByCode(String code);

	/**
	 * 查询单个实体
	 * 
	 * @param target
	 * @return
	 */
	T find(T garget);

	/**
	 * 查询所有实体
	 * 
	 * @param target
	 * @return
	 */
	List<T> findAll();

	/**
	 * 条件查询实体
	 * 
	 * @param target
	 * @return
	 */
	T find(Map<String, Object> fields);

}
